Python中的这些运算符你真的会用吗?
本文作者:王子一,中南财经政法大学金融学院
文字编辑:方 言
技术总编:张馨月
爬虫俱乐部云端课程
is
与==
是否可以互相代替?and
与&
一样吗?这些符号分别对应着Python中的身份运算符、比较运算符、逻辑运算符和位运算符,今天我们就来通过两个小案例一起学习吧!案例1-
is
与==
是否可以互相代替?
可以看到,
b is a
输出结果为False,而b==a
输出的结果为True。
==
与is
分别对应于比较运算符和身份运算符,在解答之前,我们先了解一下这两类运算符。
比较运算
运算符 | 描述 |
---|---|
== | 判断两个对象是否相等,真为True,假为False |
!= | 判断两个对象是否不相等,结果表示同上 |
> < >= <= | 判断大小 |
print(4!=5) #判断a与b是否相等
print("abc" < "aba") # 逐个比较两个字符串相应位置字符的ASCII码大小
print("abc" == "abc") # 比较两个字符串的内容是否相同
print([1,2,3] == [1,2,3,4]) #比较两个列表的内容是否相同
print([1,2,3] > [1,3,'a']) #逐个比较两个列表相应位置元素的ASCII码大小
身份运算
身份运算用于比较两个对象的存储单元,表示两个对象是否储存在一个单元里,其运算符如下:
运算符 | 描述 |
---|---|
is | 判断两个标识符是不是引用自一个对象 |
is not | 判断两个标识符是不是引用自不同对象 |
了解完两种运算符后,我们可以解答开头提到的问题。==是比较运算符,用于判断二者是否相等;is是身份运算符,用于判断二者是否相同。
更具体来说, == 会判断引用变量的值是否相等,is判断两个变量引用对象是否为同一块内存空间。
上述例子中,a,b的形式相同,但是存储位置不同,所以输出结果不同。
案例2-
and
与&
傻傻分不清楚?
可以看到
a&b
的运算结果为12,a and b
的运算结果则为13,这与我们的直觉结果有所差异。这是因为二者为两种完全不同类型的运算符,分别对应于Python中的位运算符和逻辑运算符,下面依次进行讲解。
位运算
位运算就是是把数值看作二进制来进行计算,计算机首先将输入的变量值转化为二进制,然后按照位运算的法则进行计算并输出结果,下面展示位运算的具体符号:
运算符 | 描述 | 运算规则 |
---|---|---|
& | 按位与运算符 | 上下都是1则为1,其他情况为0 |
| | 按位或运算符 | 上下其中一个是1则为1,其他情况为0 |
^ | 按位异或运算符 | 上下相同为0,不同为1 |
~ | 按位取反运算符 | 一个有符号二进制的补码形式 |
<< | 左移运算符 | 乘法运算,左移一位就是乘以2 |
>> | 右移运算符 | 除法运算,右移一位就是除以2 |
上述例子中,c的输出结果为12,看起来与a、b的取值似乎毫无关联。这是因为位运算符的结果以十进制数展示,但它的运算过程是以二进制为依据的,我们可以把上述各变量转化为二进制来便于理解:
&的运算规则为两个相应位均为1才返回1,因此上述运算结果会返回00001100,转化为十进制后即为12。
逻辑运算
逻辑运算可以分为"与" "或" "非"语句,输出的结果也为布尔值,具体如下:
运算符 | 描述 |
---|---|
and | 布尔"与",左右皆真才为真 |
or | 布尔"或",左右一个为真即为真 |
not | 布尔"非" ,条件为真则为假 |
print(True and True) #左为真,右也为真,与语句为真
print (True or False) #左为真,右为假,或语句为真
print (not True or False) #条件为真,非语句为假
在案例2中,a、b均对应为True,且b为最后一个变量,因此返回b的取值,即为13。
字符串函数总动员
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。